#include "Hardware.h"
#include<stdio.h>



int Hardware::inicializar(int ancho, int alto, int colores){
    // Inicializo SDL
    if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
        exit(1);

    // Me aseguro de que SDL limpia al salir
    atexit(SDL_Quit);

    // Creo la pantalla visible
    pantallaVisible = SDL_SetVideoMode(
      ancho, alto, colores,
      SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF);

    if ( !pantallaVisible )
        exit(2);

    // Y la oculta
    pantallaOculta = SDL_CreateRGBSurface(SDL_SWSURFACE,
      ancho,alto,colores, 0,0,0,0);
    if ( !pantallaOculta )
        exit(3);

    // Inicializo SDL_TTF
    if ( TTF_Init() < 0 )
        exit(5);
    atexit(TTF_Quit);

    arial12 = TTF_OpenFont("arial.ttf",12);
    arial24 = TTF_OpenFont("arial.ttf",24);

    return 0;
}

Imagen* Hardware::cargarImagen(char *fichero) {
    Imagen* imagen; //############################# quitado SDLA_
    imagen = SDL_LoadBMP(fichero);
    if (imagen == NULL)
      exit(4);
    return imagen;
}

int Hardware::borrarPantallaOculta(int r, int g, int b) {
    SDL_FillRect(pantallaOculta,
      0,SDL_MapRGB(pantallaOculta->format,
      r,g,b));
}

int Hardware::dibujarImagenOculta(Imagen *imagen,
      int x,int y){

    SDL_Rect posicion;
    posicion.x = x;
    posicion.y = y;
    SDL_BlitSurface(imagen, 0,
      pantallaOculta, &posicion);
}

int Hardware::visualizarOculta(){
    SDL_BlitSurface(pantallaOculta, 0,
      pantallaVisible, 0);
    SDL_Flip( pantallaVisible );
        printf("\nbotonPulsado!!!");

}

void Hardware::colorTransparente(Imagen* imagen,
      int r, int g, int b){

    SDL_SetColorKey(imagen,
      SDL_SRCCOLORKEY|SDL_RLEACCEL,
      SDL_MapRGB(imagen->format, r,g,b));
}

int Hardware::botonPulsado(int c){
    SDL_PumpEvents();
    Uint8 *keys = SDL_GetKeyState(NULL);
    if (keys[c] == 1)
      return 1;
    else
      return 0;

}

int Hardware::escribirTextoOculta(char *frase,
      int x,int y, int color, Fuente *fuente){

    Color bgcolor,fgcolor;
    Imagen *textoComoImagen;

    /* El color de primer plano sera el escogido */
    fgcolor.r = (color & 0xff0000)>>16;
    fgcolor.g = (color & 0x00ff00)>>8;
    fgcolor.b = color & 0x0000ff;

    /* El fondo sera negro (transparente) */
    bgcolor.r=0;
    bgcolor.g=0;
    bgcolor.b=0;

    /* Preparo el bitmap */
    textoComoImagen = TTF_RenderText_Shaded(fuente,
      frase,fgcolor,bgcolor);
    colorTransparente(textoComoImagen,0,0,0);

    /* Y dibujo */
    dibujarImagenOculta(textoComoImagen, x,y);
}

bool Hardware::comprobarRaton(){

        SDL_PumpEvents();
        if(SDL_GetMouseState(NULL,NULL)&SDL_BUTTON(1))
        {

            SDL_GetMouseState(&posRatX,&posRatY);
                return true;

        }
        else
        {
                posRatX = posRatY = 0;
                return false;
        }
}


int Hardware::colision(int x1, int y1, int an1, int al1,
      int x2, int y2, int an2, int al2) {
    if ((x2+an2 > x1)
        && (y2+al2 > y1)
        && (x1+an1 > x2)
        && (y1+al1 > y2))
      return 1;
    else
      return 0;
}

